package com.ning.reggie.common;

/**
 * 基于 ThreadLocal 封装工具类，用于保存和获取当前登录用户 id。
 * ThreadLocal 可以为每个线程提供独立的变量副本，确保在多线程环境下安全地存储和访问当前线程相关的数据。
 */
public class BaseContext {
    // 创建一个 ThreadLocal 对象，用于存储当前线程的 Long 类型数据，这里存储的是当前登录用户的 id。
    private static ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    /**
     * 设置值。
     * 将给定的用户 id 存储到当前线程的 ThreadLocal 变量中。
     *
     * @param id 当前登录用户的 id。
     */
    public static void setCurrentId(Long id) {
        threadLocal.set(id);
    }

    /**
     * 获取值。
     * 从当前线程的 ThreadLocal 变量中获取存储的用户 id。
     *
     * @return 当前线程存储的用户 id，如果没有设置则返回 null。
     */
    public static Long getCurrentId() {
        return threadLocal.get();
    }
}
